NPC - Script
';' Regel Anweisungen mit () z.B. w(1000) brauchen kein ';' am Ende. Zuweisungen (r1=1;) und '++',' --', (++r1;) enden mit ';' . Kommentar: //.....: nur bis zum Ende der Zeile. /* von */ bis: auch über mehrere Zeilen. [] Index: Die Nummer der Variable kann mit anderen Variablen indexiert werden. Beispiel: b1=1; //---- Schleife b1=1 - b1=8 ------ :1 f[b1]=b1+5; //.....Es werden f1 bis f8 zugewiesen. ++b1; if(b1<9)go(1)
if - Abfrage
if( expr) stat e stat; ?(expr)...
expr= [Nicht]Variable (Vergleich (Variable|Zahl) [Logik])*.
Beispiel:
if(f1)f2=2; | expr(f1) '0' = False; '>=1' = True;
if(~i1)f2=2; | '~' = Verneinung (nicht bei float)
if(r7!=1)r8=0; e r8=1; | 'e' = else;
?(b1=3 & i2=-1 | r1=1)f2=2; | '( )' in expr nicht möglich
: Adresse
0-9 Sprung | a-z Unterprogramm
max. 10 | max. 10
Beispiel:
go(3) ... :3 ++i1; ... | a{......} go(a)
:I{}
Interrupt ( Unterbrechung ) erhöht die Echtzeit- (Real-time) Fähigkeit des Scripts. Die Reaktion des Programms auf Änderungen der Hardware wird durch lange Programme oder Warte-Befehle wie w() oder pg() verlangsamt. Interrupt (wie ein Unterprogramm aufgebaut) wird nach jeder Programmzeile oder in Warte-Befehlen ausgeführt. Variable it bestimmt die Zeitabstände. Wird it nicht bestimmt oder ist it=0, wird das Interrupt so oft wie möglich ausgeführt. Warte-Befehle wie w() oder pg() sollten hier vermieden werden. Auch lange Programm-Ketten sind nicht ratsam wenn it klein ist.
Beispiel:
it=2500; //2,5 Sek. :I{p1=~p1;} ...
go(Adresse[ohne:])
0-9 Sprung | a-z Unterprogramm aufrufen.
max. 10 | max. 10
Beispiel:
go(3) ... :3 ++i1; ... | :c{...[ret;]...} go(c) ...
ret;
Return (Rücksprung) aus dem Unterprogramm. Unterbricht das Unterprogramm an beliebiger Stelle. Am Ende des Unterprogramms ist ret; nicht notwendig.
Beispiel:
:c{...[ret;]...} go(c) ... |
w(zahl|Var) Warten in ms
Wartefunktion in Millisekunden. Die Programmausführung wird für die Zeit gestoppt. Zahl (0-65535) oder Variable als Parameter. Min. Zeit 10 ms.
Beispiel:
i2=1000; w(i2)......w(2500) |
pg(IP) Ping an die IP senden
Das Ergebnis wird in der pg Variablen gespeichert. '-1' keine Antwort '>0' Antwortzeit in ms. Die IP wird gespeichert. Bei zweitem Aufruf und gleicher IP reicht nur pg().
Beispiel:
pg(192.168.0.25) if(pg>0)...//empfangen; |
udp(IP,Port,String) UDP String an die IP senden
IP z.B.: 192.168.178.85 Port: Zahl|Var. Variablen werden in Int (16Bit) Format umgewandelt String: 'Zeichenkette' [/zahl (ASCII Zeichen)] [Var] [/Var (Variable binär)] /Var - (Variable binär) wandelt die Var nicht in ASCII um, sondern sendet die binär Werte je nach Größe 1-4 Byte: wenn u1=1; wird nicht 49 (ASCII '1') sondern 1 gesendet. Die IP und Port werden gespeichert. Bei zweitem Aufruf und gleicher IP und Port reicht nur udp('....').
Beispiel:
f2=65000; u1=1; udp(192.168.178.85,f2,'test '/u1\42' test weiter')
String - max. 64 zeichen f1.3 (0-9) - float Nachkommastellen /Var Bytes gesendet - Big Endian | \70 /Var BYTE, Boolean Integer Float | ASCII-Zeichen (z.B. \70= F) sendet Variable im Binär Format. 1 Byte 2 Bytes 4 Bytes
@() E-Mail Adresse
Die E-Mail Adresse wird festgelegt. Der Printbuffer wird an die Adresse durch das Befehl p(\@) per E-Mail versendet. Die E-Mail-Einstellung muss konfiguriert sein (Einstellung/E-Mail).
Beispiel:
@(info@anel-elektronik.de) |
p() - Print - Drucken
Es wird in den Printbuffer ausgegeben. Der Printbuffer (1024 Byte) kann oben in der Steuerung angezeigt oder per E-Mail gesendet werden.
p(expr)
expr= '...' [\..][Var]['..']
Beispiel:
p('<tr><td>Version = 'v.1'<td>Temperatur = 't.2'°C')
p(h#2':'m#2':'s#2)
Print Buffer = 1024 Byte f1.3 (0-9) - float Nachkommastellen i1#3 (0-9) - mit Nullen füllen (nicht float) String - max. 64 zeichen E-Mail Adress - max. 48 zeichen> | \b \f \" \' \? \s \\ \70 \p25 \@ | (backspace) = ein Zeichen zurück. (form feed) = Cursor auf Anfang (\p0). = " = ' = ? space (HTML: `&#160;` oder `&nbsp;`). = \ ASCII-Zeichen (z.B. \70= F) position im Buffer E-Mail senden